package com.order.manager.Model;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import lombok.Data;

/**
 * 
 * @TableName user_address
 */
@TableName(value ="user_address")
@Data
public class UserAddress implements Serializable {
    /**
     * 地址id
     */
    @TableId(type = IdType.AUTO)
    private Long addressId;

    /**
     * 用户id
     */
    private String userId;

    /**
     * 地址
     */
    private String address;

//    @TableField(exist = false) 是 MyBatis-Plus 框架提供的注解，
//    它的作用是告诉框架：这个字段在数据库对应的表中并不存在。
//    在进行数据库操作（像插入、查询）时，框架会自动忽略被该注解标记的字段。
//    序列化标识：在对象实现 Serializable 接口时，serialVersionUID 能用来保证序列化和反序列化过程的版本一致性。
//    保持兼容性：如果没有显式定义这个 ID，Java 会根据类的结构自动生成。
//     不过，当类发生改变时，自动生成的 ID 可能会变化，进而导致反序列化失败。
//    在 Java 编程里，序列化（Serialization） 是一种把对象的状态转换为字节流的机制。通过这个机制，
//    对象可以被存储到文件中、在网络上进行传输，或者在内存里缓存起来。
//    而 反序列化（Deserialization） 则是相反的过程，它能将字节流重新恢复成对象。
    @TableField(exist = false)

    private static final long serialVersionUID = 1L;
    //复制到这里后面

    //userId.equals(userInfo.userId);
    //这个是userId与userInfo.userId进行比较
    @Override
    public boolean equals(Object that) {
        if (this == that) {
            return true;
        }
        if (that == null) {
            return false;
        }
        if (getClass() != that.getClass()) {
            return false;
        }
        UserAddress other = (UserAddress) that;
        return (this.getAddressId() == null ? other.getAddressId() == null : this.getAddressId().equals(other.getAddressId()))
            && (this.getUserId() == null ? other.getUserId() == null : this.getUserId().equals(other.getUserId()))
            && (this.getAddress() == null ? other.getAddress() == null : this.getAddress().equals(other.getAddress()));
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((getAddressId() == null) ? 0 : getAddressId().hashCode());
        result = prime * result + ((getUserId() == null) ? 0 : getUserId().hashCode());
        result = prime * result + ((getAddress() == null) ? 0 : getAddress().hashCode());
        return result;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append(getClass().getSimpleName());
        sb.append(" [");
        sb.append("Hash = ").append(hashCode());
        sb.append(", addressId=").append(addressId);
        sb.append(", userId=").append(userId);
        sb.append(", address=").append(address);
        sb.append(", serialVersionUID=").append(serialVersionUID);
        sb.append("]");
        return sb.toString();
    }
}